package common;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class PagingManager {

	private List<Integer> pageNo;	// 페이지 그룹의 페이지 번호를 담고 있는 List

	private int prev       ;		// 이전 페이지 그룹의 페이지 번호
	private int next       ;		// 다음 페이지 그룹의 페이지 번호
	private int last       ;		// 마지막 페이지 번호
	private int currentPage;		// 현재 페이지 번호
	private int pageSize   ;		// 페이지별 리스트 갯수
	private int totalCount ;		// 리스트 총 갯수
	
	private String returnHtml;

	/********************************
	 * 페이지 관련 정보 설정
	 *******************************/
	public void setPageNo(Map<String, Object> param) {
		
		pageNo = new ArrayList<Integer>();
		
		currentPage       = (Integer) param.get("currentPage")  ;
		pageSize          = (Integer) param.get("pageSize")     ;
		int pageGroupSize = (Integer) param.get("pageGroupSize");				// 페이지 그룹의 페이지 갯수
		totalCount        = (Integer) param.get("totalCount")   ;

		prev             = 0;
		next             = 0;
		int pageCount    = (totalCount/pageSize)+(totalCount%pageSize==0?0:1);	// 총페이지수
		last             = pageCount;
		int currentGroup = (int) Math.ceil((double)currentPage/pageGroupSize);	// 현재그룹
		int totalGroup   = pageCount/pageSize+1;								// 총그룹
		int startPage    = (currentGroup-1)*pageGroupSize+1; 					// 페이지 그룹의 시작페이지
		int endPage      = startPage+pageGroupSize; 							// 페이지 그룹의 마지막페이지
		
		if(endPage>pageCount){
			endPage = pageCount+1;
		}

		for(int i=startPage;i<endPage;i++){
			pageNo.add(i);
		}

		if(currentGroup>1){
		    prev=(currentGroup-2)*pageGroupSize+pageSize;
		}

		if(currentGroup<totalGroup){
			next=currentGroup*pageGroupSize+1;
		}
		
		getPageSet();
	}
	
	/********************************
	 * 페이징 소스 작성
	 *******************************/
	public String getPageSet() {
		
		String firstHtml  = "";
		String prevHtml   = "";
		String currHtml   = "";
		String nextHtml   = "";
		String lastHtml   = "";
		
		String firstSymbol = "<img src='page/frist.gif' alt='첫페이지' border='0' align='absmiddle'/>";
		String prevSymbol  = "<img src='page/prev.gif' alt='이전'  border='0' align='absmiddle'/>";
		String nextSymbol  = "<img src='page/next.gif' alt='다음'  border='0' align='absmiddle'/>";
		String lastSymbol  = "<img src='page/end.gif' alt='끝페이지'  border='0' align='absmiddle'/>";
		
		//*** 첫 페이지 ***//
		firstHtml = "<div id='bbs_paging'><ul><li class='fst'><a href='javascript:doList(1)'>" + firstSymbol + "</a></li>&nbsp;";
		
		//*** 이전 페이지 ***//
		if ( prev > 0 )
			prevHtml = "<li class='prev'><a href='javascript:doList(" + prev + ")'>"  + prevSymbol + "</a></li>&nbsp;&nbsp;";
		else
			prevHtml = prevSymbol;
		
		//*** 현재 그룹 페이지 ***//
		for ( int i = 0; pageNo.size() > i; i++ )
		{
			if(currentPage == pageNo.get(i).intValue())
				currHtml +="<li><span class='active'>"+pageNo.get(i)+"</span></li>&nbsp;";
			else
				currHtml += "<li><a href='javascript:doList(" + pageNo.get(i) + ")'>" + pageNo.get(i) + "</a></li>&nbsp;";
		}
		//*** 다음 페이지 ***//
		if ( next > 0 )
			nextHtml = "<li class='next'><a href='javascript:doList(" + next + ")'>"  + nextSymbol + "</a></li>&nbsp;";
		else
			nextHtml = nextSymbol;
		
		//*** 마지막 페이지 ***//
		lastHtml = "<li class='end'><a href='javascript:doList(" + last + ")'>" + lastSymbol + "</a></li></ul></div>";

		returnHtml = firstHtml+prevHtml+currHtml+nextHtml+lastHtml;
		
		return returnHtml;
	}
	
	//*** setter/getter ***//
	public int getPrev(){
		return prev;
	}
	public int getNext(){
		return next;
	}
	public List<Integer> getPageNo() {
		return pageNo;
	}

	public int getLast() {
		return last;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public int getPageSize() {
		return pageSize;
	}
	
	public int getTotalCount() {
		return totalCount;
	}
	
	public String getReturnHtml() {
		return returnHtml;
	}
	
	public void setReturnHtml(String returnHtml) {
		this.returnHtml = returnHtml;
	}	
}
